#统计相同数字出现次数
# def sovle(arr, n):
#     #找最大值和最小值
#     min_value = min(arr)
#     max_value = max(arr)
#     #创建计数数组
#     counts = [0] * (max_value - min_value + 1)
    





# n = int(input())
# arr = list(map(int, input().split(" ")))




#回文素数

#素数
def is_prim(num):
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True

#回文数
def is_pal(num):
    arr = []
    while num != 0:
        arr.append(num % 10)
        num //= 10
    left = 0
    right = len(arr) - 1
    while left <= right:
        if arr[left] == arr[right]:
            if left == right:
                return True
            left += 1
            right -= 1
        elif arr[left] != arr[right]:
            return False
    if left > right and arr[left] == arr[right]:
        return True

# count = 0
# i = 2
# while count < 100:
#     if is_prim(i) and is_pal(i):
#         count += 1
#         print(i, end = " ")
#         if count % 10 == 0:
#             print()
#     i += 1


"""
              1
    		2 1
...       3 2 1
n n-1 ... 3 2 1
"""
def display_pattern(n):
    for i in range(1, n + 1):
        #空格
        for k in range(n - i):
            print(" " * 2, end = " ")
        #数字
        for j in range(i, 0, -1):
            print(f'{j:>2d}', end = " ")
        print()

# n = int(input())
# display_pattern(n)



"""
m(i) = 1/2 + 2/3 + ... + i/(i + 1)
"""

i = int(input())
#分子
fenzi = 1
#分母
fenmu = 2
#累加
the_sum = 0
print(f'{i}     m(i)')
for j in range(1, i + 1):
    num = fenzi / fenmu
    the_sum += num
    fenzi += 1
    fenmu +=1
    print(f'{j:>2d}     {the_sum:.2f}')


